package tankgame3;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

//为了子弹一直重汇，做成线程
public class MyPanel extends JPanel implements KeyListener ,Runnable{

    SuperMan tank =null;
    ////敌人坦克，每个坦克在自己线程独自运行，所以用Vector（线程安全）
    Vector<Enemy> enemies = new Vector<>();
    int enemySize=3;

    public MyPanel(){
        tank=new SuperMan(100,100);//初始化坦克
        tank.setSpeed(3);
        for(int i=0;i<enemySize;i++){
            Enemy enemy = new Enemy(100 * (i + 1), 0);
            enemy.setDirect(2);
            enemies.add(enemy);//敌人坦克
        }
    }

    @Override
    public void run() {//隔100ms，重回一次
        while (true){
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        repaint();
        }//while

    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);

        g.fillRect(0,0,1000,750);//填冲矩形，默认黑色（就是面板上全是黑色而已）

        //画子弹
        if(tank.shot!=null && tank.shot.isLive==true){
            g.draw3DRect(tank.shot.x,tank.shot.y,3,3,false);
            System.out.println("-------------");

        }

        //画坦克
        drawTank(tank.getX(),tank.getY(),g,tank.getDirect(),0);
        for (int i=0;i<enemies.size();i++){
            Enemy enemy = enemies.get(i);
            drawTank(enemy.getX(),enemy.getY(),g,enemy.getDirect(),1);//地方坦克

        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }//keyTyped

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_W){    // w键
            tank.setDirect(0);
            tank.moveUp();
//            tank.setY(tank.getY()-1);//这种做法就太low了
        }else if(e.getKeyCode()==KeyEvent.VK_S){
            tank.setDirect(2);
            tank.moveDown();
        }else if(e.getKeyCode()==KeyEvent.VK_A){
            tank.setDirect(3);
            tank.moveLeft();
        }else if(e.getKeyCode()==KeyEvent.VK_D){
            tank.setDirect(1);
            tank.moveRight();

        }
        //J键我方坦克创建子弹线程
        if(e.getKeyCode()==KeyEvent.VK_J){
            tank.shotEnemyTank();
        }

        this.repaint();//按键后，画新图
    }//keyPressed

    @Override
    public void keyReleased(KeyEvent e) {

    }
    /**
     *
     * @param x
     * @param y
     * @param g    画笔
     * @param direct   坦克上下左右方向
     * @param type 敌方，我方坦克
     */
    public void drawTank(int x,int y,Graphics g,int direct,int type){
        switch (type){
            case 0://我方坦克
                g.setColor(Color.cyan);//青色
                break;
            case 1://敌方坦克
                g.setColor(Color.yellow);//控制所有图形的颜色
                break;
        }
        //不同方向，坦克样子都要画！麻烦哦
        //0-上  1-右  2-下 3-左
        switch (direct){
            case 0://朝上的坦克
                g.fill3DRect(x,y,10,60,false);//左边轮子
                g.fill3DRect(x+30,y,10,60,false);//右边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//中间方形
                g.fillOval(x+10,y+20,20,20);//中间圆圈
                g.drawLine(x+20,y+30,x+20,y);//炮筒
                break;
            case 1://朝右的坦克
                g.fill3DRect(x,y,60,10,false);//上边轮子
                g.fill3DRect(x,y+30,60,10,false);//下边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//中间方形
                g.fillOval(x+20,y+10,20,20);//中间圆圈
                g.drawLine(x+30,y+20,x+60,y+20);//炮筒
                break;
            case 2://朝下的坦克
                g.fill3DRect(x,y,10,60,false);//左边轮子
                g.fill3DRect(x+30,y,10,60,false);//右边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//中间方形
                g.fillOval(x+10,y+20,20,20);//中间圆圈
                g.drawLine(x+20,y+30,x+20,y+60);//炮筒
                break;
            case 3://朝左的坦克
                g.fill3DRect(x,y,60,10,false);//上边轮子
                g.fill3DRect(x,y+30,60,10,false);//下边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//中间方形
                g.fillOval(x+20,y+10,20,20);//中间圆圈
                g.drawLine(x+30,y+20,x,y+20);//炮筒
                break;
            default:
                System.out.println("其他方法还没画");
        }
    }//drawTank

}
